#!/bin/sh
# shellcheck disable=SC2164

distDir="/usr/local/src/tianya_web/dist"
# 获取服务器局域网ip地址，192.168网段的
local_host=$(ifconfig | grep 192.168 | cut -d: -f2 | awk '{print $2}')

function nodeInstall() {
  if ! type node >/dev/null 2>&1; then
    echo "================nodejs未安装，开始安装================"
    curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
    yum install -y nodejs
    yum install gcc-c++ make
    echo "================nodejs安装完成================"
  fi
}

function dockerInstall() {
  if ! type docker >/dev/null 2>&1; then
    echo 'docker 未安装'

    echo '安装docker'
    curl -sSL https://get.daocloud.io/docker | sh

    echo '安装docker ce'
    sudo yum install docker-ce docker-ce-cli containerd.io

    echo '启动docker'
    sudo systemctl start docker

    echo '安装docker-compose'
    sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-(𝑢𝑛𝑎𝑚𝑒−𝑠)−(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose

    echo 'docker组件安装完成'
  fi
}

function cloneCode() {
  cd /usr/local/src
  echo "================开始下载代码================"
  git clone git@gitee.com:slowchen/tianya.git
  git clone git@gitee.com:slowchen/tianya_web.git
  echo "================代码下载完成================"
}

function packCode() {
  cd tianya_web
  mkdir logs
  echo "================开始安装前端依赖================"
  npm i
  echo "================依赖安装完成================"
  echo "================开始打包================"
  npm run build:prod
  echo "================打包完成================"
}

function dockerStart() {
  cd /usr/local/src/tianya
  echo "================开始构建镜像================"
  docker-compose build
  echo "================启动容器================"
  docker-compose up -d
}


# 初始化的方法，首次部署时将执行
function initFunc() {
  nodeInstall
  dockerInstall
  cloneCode
  packCode
  dockerStart
}

# 部署方法，非首次部署时将执行
function deployFunc() {
  echo "deploy function"
  cd /usr/local/src/tianya_web
  git pull origin master
  echo "================开始打包================"
  npm run build:prod
  echo "================打包完成================"
  cd /usr/local/src/tianya
  git pull origin master
  echo "================开始构建镜像================"
  docker-compose build
  echo "================启动容器================"
  docker-compose up -d
}

if [ ! -d "$distDir" ]; then
  echo "$distDir 不存在，执行初始化"
  initFunc
  echo "================init done，请访问$local_host================"
else
  echo "$distDir 已存在，执行部署"
  deployFunc
  echo "================deploy done，请访问$local_host================"
fi
